﻿using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
// 可以结合host使用
 // using var host = Host.CreateDefaultBuilder(args)
 //     .UseEnvironment("Development")
 //     .ConfigureAppConfiguration((context, builder) =>
 //         builder.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
 //             .AddJsonFile("appsettings.Development.json", optional: true, reloadOnChange: true)
 //             .AddEnvironmentVariables()
 //             .AddCommandLine(args)
 //             .AddUserSecrets(typeof(Program).Assembly))
 //     .ConfigureServices((context, services) =>
 //     {
 //         // services.AddSingleton();
 //     })
 //     .Build(); 
 // host.Run();
// 两者的配置项如果相同，后面加载的会覆盖前面加载的
// 两个JSON文件中的配置项后续都可以使用
// optional表示是否允许配置文件不存在，false时文件不存在则会抛出异常，true时会忽略
// reloadOnChange设置为 true，则会在配置文件发生变化时重新加载配置文件
var configuration = new ConfigurationBuilder()
    .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
    .AddJsonFile("appsettings.Development.json", optional: true, reloadOnChange: true)
    .AddEnvironmentVariables()
    .AddCommandLine(args)
    .Build();
//读取配置，借助 : 来表示JSON中的层级关系
var logLevel = configuration["Logging:LogLevel:Default"];
var connectionString = configuration["Logging:ConnectionStrings:Default"];
var width = configuration["SystemSettings:Sizes:0:Width"];

Console.WriteLine($"Logging level: {logLevel}");
Console.WriteLine($"Connection string: {connectionString}");
Console.WriteLine($"Width: {width}");
// 需要注意获取到的对象是初始化后的实例
// 如果配置文件自动重载，需要重新执行获取对象的代码才能同步更新
// 安装Microsoft.Extensions.Configuration.Binder
var userSettings = configuration.GetSection("UserSettings").Get<UserSettings>();
Console.WriteLine($"User settings Name:{ userSettings?.Name}");
Console.WriteLine($"User settings Age:{userSettings?.Age}");
Console.ReadLine();
public class UserSettings
{
    public string Name { get; set; }
    public int Age { get; set; }
    public bool IsActive { get; set; }
}
